#pragma once
//Vector Context Register(Queue context)

class ChipBus;
class VectorRegister
{
public:
	VectorRegister(ChipBus& internalQueue, ChipBus& controlQueue, ChipBus& explicitQueue, ChipBus& recordQueue, ChipBus& interfaceQueue, /*ChipBus& marketQueue,*/ ChipBusSet& chipBusSet)
		:m_internalQueue(internalQueue)
		,m_controlQueue(controlQueue)
		,m_explicitQueue(explicitQueue)
		,m_recordQueue(recordQueue)
		,m_interfaceQueue(interfaceQueue)
// 		,m_marketQueue(marketQueue)
		,m_chipBusSet(chipBusSet)
	{
	}

	VectorRegister(VectorRegister const& other)
		:m_internalQueue(other.GetInternalQueue())
		,m_controlQueue(other.GetControlQueue())
		,m_explicitQueue(other.GetExplicitQueue())
		,m_recordQueue(other.GetRecordQueue())
		,m_interfaceQueue(other.GetInterfaceQueue())
// 		,m_marketQueue(other.GetMarketQueue())
		,m_chipBusSet(other.GetChipBusSet())
	{
	}

public:
	ChipBus& GetInternalQueue() const { return m_internalQueue; }
	ChipBus& GetControlQueue() const { return m_controlQueue; }
	ChipBus& GetExplicitQueue() const { return m_explicitQueue; }
	ChipBus& GetRecordQueue() const { return m_recordQueue; }
	ChipBus& GetInterfaceQueue() const { return m_interfaceQueue; }
// 	ChipBus& GetMarketQueue() const { return m_marketQueue; }
	ChipBusSet& GetChipBusSet() const { return m_chipBusSet; }
	ChipBus& GetExternalQueue(Exchange::FLAG connectionFlag) const { return *m_chipBusSet[connectionFlag].get(); }

private:
	ChipBus& m_internalQueue;	//for business
	ChipBus& m_controlQueue;	//for time
	ChipBus& m_explicitQueue;	//for explicitTime
	ChipBus& m_recordQueue;		//for memory
	ChipBus& m_interfaceQueue;	//for interface
// 	ChipBus& m_marketQueue;		//for market
	ChipBusSet& m_chipBusSet;	//for eachBus order
};